home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK1.toast / Development Kits (Disc 1) / QuickDraw 3D / Samples / SampleCode / CustomAttribute / NetscapeLink.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-21  |  4.4 KB  |  204 lines  |  [TEXT/CWIE]

  1. #include <EPPC.h>
  2. #include <AppleEvents.h>
  3. #include <Aliases.h>
  4. #include <string.h>
  5. #include <Memory.h>
  6. #include <TextUtils.h>
  7. #include <Strings.h>
  8.  
  9. #include "IsAppRunning.h"
  10.  
  11. void testNetscape(void);
  12.  
  13. static AEDesc theAddressDesc;
  14.  
  15. static Boolean Find_NetScape(void);
  16.  
  17. static pascal Boolean MyFilter(LocationNamePtr locationName, PortInfoPtr thePortInfo);
  18. static pascal Boolean MyIdle(EventRecord *theEvent, long *sleepTIme, RgnHandle *mouseRgn);
  19. static Boolean OpenNetscape(void);
  20. static OSErr CloseNetscape(void);
  21. static void ActivateNetScape(void);
  22.  
  23. static Boolean opened = false;
  24.  
  25. /**************************************************************************************************
  26. *
  27. *
  28. *                        PUBLIC FUNCTIONS
  29. *
  30. *
  31. **************************************************************************************************/
  32.  
  33. Boolean OpenURL(char *url);    // go to the page specified by the url
  34.  
  35. void ShowFile(char *name);    // have netscape show the file with the name (may launch helper apps)
  36.  
  37.  
  38. Boolean OpenURL(char *name)
  39. {
  40.     AppleEvent    theAppleEvent, theReply;
  41.     OSErr        err;
  42.  
  43.     if (Find_NetScape() == false)
  44.         return false;
  45.         
  46.                 
  47.     err = AECreateAppleEvent ('WWW!','OURL', &theAddressDesc,
  48.                              kAutoGenerateReturnID, kAnyTransactionID, &theAppleEvent);
  49.                                 
  50.         
  51.     err = AEPutParamPtr(&theAppleEvent, keyDirectObject, typeChar, name, strlen(name));
  52.         
  53.     err = AESend(&theAppleEvent, &theReply, 
  54.                 kAEWaitReply,kAENormalPriority, kNoTimeOut,
  55.                 NewAEIdleProc(MyIdle), NewAEFilterProc(MyFilter));
  56.     
  57.     if( err == noErr )
  58.         return true;
  59.     else
  60.         return false;            
  61. }
  62.  
  63. void ShowFile(char *name)
  64. {
  65.     AppleEvent    theAppleEvent, theReply;
  66.     OSErr        err;
  67.     AliasHandle alias = nil;
  68.     FSSpec fss;
  69.     short vRefNum;
  70.     char pstr[256];
  71.     
  72.         
  73.     if (Find_NetScape() == false)
  74.         return;
  75.         
  76.                 
  77.     err = AECreateAppleEvent ('WWW!','SHWL', &theAddressDesc,
  78.                              kAutoGenerateReturnID, kAnyTransactionID, &theAppleEvent);
  79.                                 
  80.     
  81.     GetVol(nil, &vRefNum);
  82.     strcpy(pstr, name);
  83.     c2pstr(pstr);
  84.     
  85.     err = FSMakeFSSpec( vRefNum, 0, (StringPtr)pstr, &fss);
  86.     err = NewAlias(nil, &fss, &alias);
  87.             
  88.     err = AEPutParamPtr(&theAppleEvent, keyDirectObject, typeAlias, &alias, 
  89.                             GetHandleSize((Handle)alias));
  90.     
  91.     err = AESend(&theAppleEvent, &theReply, 
  92.                 kAEWaitReply,kAENormalPriority, kNoTimeOut,
  93.                 NewAEIdleProc(MyIdle), NewAEFilterProc(MyFilter));
  94. }
  95.  
  96. /**************************************************************************************************
  97. *
  98. *
  99. *                        PUBLIC FUNCTIONS
  100. *
  101. *
  102. **************************************************************************************************/
  103.  
  104. static pascal Boolean MyFilter(LocationNamePtr locationName, PortInfoPtr thePortInfo)
  105. {
  106.     return true;
  107. }
  108.  
  109. static pascal Boolean MyIdle(EventRecord *theEvent, long *sleepTIme, RgnHandle *mouseRgn)
  110. {
  111.     return false;
  112. }
  113.  
  114.  
  115. static Boolean Find_NetScape(void)
  116. {
  117.     ProcessSerialNumber targetPSN ;
  118.     
  119.     ProcessInfoRec     targetPIRec ;
  120.     Str255                 targetName ;
  121.     OSErr                     err = paramErr;
  122.     Boolean                retVal = false ;
  123.     
  124.     // if we are running we want the PSN and stuff,
  125.     // otherwise we need to launch it and get the information
  126.     
  127.     if(!IsAppRunning( 'APPL',
  128.                       'MOSS',
  129.                       &targetPSN, 
  130.                       &targetPIRec, 
  131.                       targetName ) )
  132.     {
  133.             err = LaunchApp( 'MOSS' ) ;
  134.  
  135.             if( err == noErr)
  136.                     retVal = true;
  137.                 else
  138.                     retVal = false;
  139.     } else if (targetPIRec.processSignature == 'MOSS')
  140.         retVal = true;
  141.     else 
  142.         retVal = false ;
  143.  
  144.     if( retVal == true ) {
  145.         if( opened == false) {    // you only want to create the descriptor once
  146.             DescType sig = 'MOSS';
  147.             
  148.             err = AECreateDesc (typeApplSignature, (Ptr) &sig, sizeof(DescType), &theAddressDesc);
  149.             if (err != noErr) {
  150.                 retVal = false;
  151.             } else {
  152.                 opened = true;
  153.                 retVal = true;
  154.             }
  155.         }
  156.     } else
  157.         retVal = false;
  158.     
  159.     return retVal ;
  160.  
  161. }
  162.  
  163. static Boolean OpenNetscape(void) 
  164. {
  165.     OSErr err = noErr;
  166.  
  167.     
  168.     if (!opened) {
  169.         if (Find_NetScape() == false)
  170.             return false;
  171.         
  172.         {
  173.             DescType sig = 'MOSS';
  174.     
  175.             err = AECreateDesc (typeApplSignature, (Ptr) &sig, sizeof(DescType), &theAddressDesc);
  176.             if (err == noErr)
  177.                 opened = true;
  178.             else
  179.                 return false;
  180.         }
  181.     }
  182.     
  183.     return true;
  184. }
  185.  
  186. static OSErr CloseNetscape(void)
  187. {
  188.     return AEDisposeDesc (&theAddressDesc);
  189. }
  190.     
  191. static void ActivateNetScape(void)
  192. {
  193.     AppleEvent    theAppleEvent, theReply;
  194.     OSErr        err;
  195.  
  196.     if (Find_NetScape() == false)
  197.         return;
  198.  
  199.     err = AECreateAppleEvent('WWW!','ACTV',&theAddressDesc,
  200.                 kAutoGenerateReturnID, kAnyTransactionID,&theAppleEvent);
  201.     
  202.     err = AESend(&theAppleEvent, &theReply, kAEWaitReply,kAENormalPriority, kNoTimeOut, nil, nil);
  203.  
  204. }